package cn.net.asiacom.utils;

import cn.net.asiacom.entity.Original;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;

/**
 * 收据(普通发票|专用发票|火车票)pdf文件处理工具类
 */
public class ReceiptFileUtil {
    /**
     * 处理指定的PDF发票文件
     * @param pdfFile PDF文件
     * @return 包含提取信息的 Original 对象
     */
    public static Original processFile(File pdfFile) {
        if (!FileTypeUtil.isPdfFile(pdfFile)) {
            throw new RuntimeException("指定的源文件不是PDF文件");
        }
        if (!pdfFile.exists()) {
            throw new RuntimeException("指定的源文件不存在");
        }
        Original original = new Original();
        try {
            PDDocument doc = Loader.loadPDF(pdfFile);
            PDPage firstPage = doc.getPage(0);

            original.setDoc(doc);
            original.setPage(firstPage);

            PDFTextStripper pdfTextStripper = new PDFTextStripper();
            pdfTextStripper.setSortByPosition(true);

            original.setStripper(pdfTextStripper);
            original.setFullText(StrUtil.replace(original.getStripper().getText(original.getDoc())));

        } catch (Exception e) {
            throw new RuntimeException("处理PDF文件时发生异常", e);
        }
        return original;
    }

    /**
     * 处理指定的PDF发票文件
     * @param pdfPath PDF文件的路径
     * @return 包含提取信息的 Original 对象
     */
    public static Original processFile(String pdfPath) {
        return processFile(new File(pdfPath));
    }

    /**
     * 关闭指定的PDF文件
     * @param doc PDF文件
     */
    public static void close(PDDocument doc) {
        try {
            if (doc == null) {
                return;
            }
            doc.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
